package com.dlc.shop.allinpay.service;

import com.dlc.shop.bean.dto.allinpay.*;
import com.dlc.shop.common.allinpay.member.req.IdCardCollectByFileUpload;
import com.dlc.shop.common.allinpay.member.resp.*;

import java.util.List;

/**
 * @author TRACK
 */
public interface AllinpayCompanyService {

    /**
     * 注册企业会员
     * @param bizUserId
     */
    void createCompanyMember(String bizUserId);

    /**
     * 获取企业信息
     * @param tenantId
     * @return
     */
    CompanyInfo getCompanyInfo(String tenantId);

    /**
     * 发送短信验证码
     * @param bizUserId 用户id
     * @param verificationCodeDTO 短信验证码类
     */
    void sendVerificationCode(String bizUserId, VerificationCodeDTO verificationCodeDTO);

    /**
     * 绑定手机
     * @param shopId 用户id
     * @param verificationCodeDTO 短信验证码类
     */
    void bindPhone(Long shopId, VerificationCodeDTO verificationCodeDTO);

    /**
     * 解绑手机(商户无法创建提现订单，给与提示)
     * @param shopId 用户id
     * @param verificationCodeDTO 短信验证码类
     */
    void unbindPhone(Long shopId, VerificationCodeDTO verificationCodeDTO);

    /**
     * 设置企业信息
     * @param shopId 商户id
     * @param backUrl 通知地址
     * @param setCompanyInfoDTO 设置企业信息类
     * @return
     */
    SetCompanyInfoResp setCompanyInfo(Long shopId, String backUrl, SetCompanyInfoDTO setCompanyInfoDTO);

    /**
     * 修改企业信息
     * @param shopId 商户id
     * @param backUrl 通知地址
     * @param updateCompanyInfoDTO 设置企业信息类
     * @return
     */
    UpdateCompanyInfoResp updateCompanyInfo(Long shopId, String backUrl, UpdateCompanyInfoDTO updateCompanyInfoDTO);

    /**
     * 影印件采集
     * @param idCardCollectDTO 影印件信息
     * @param backUrl 异步通知地址
     * @return 采集结果
     */
    IdCardCollectResp idCardCollect(IdCardCollectDTO idCardCollectDTO, String backUrl);

    /**
     * 影印件采集（文件上传模式）
     * @param idCardCollectByFileUpload
     * @return
     */
    IdCardCollectByFileUploadResp idcardCollectByFileUpload(IdCardCollectByFileUpload idCardCollectByFileUpload);

    /**
     * 查询卡bin
     * @param cardNo 卡号
     * @return
     */
    CardBinInfo getBankCardBin(String cardNo);

    /**
     * 请求绑定银行卡
     * @param shopId
     * @param applyBankCardDTO
     * @param legalName
     */
    void applyBindBankCard(Long shopId, ApplyBankCardDTO applyBankCardDTO, String legalName);

    /**
     * 确认绑定银行卡
     * @param shopId
     * @param bindBankCardDTO'
     * @param legalName
     */
    void bindBankCard(Long shopId, BindBankCardDTO bindBankCardDTO, String legalName);

    /**
     * 解绑银行卡
     * @param shopId
     * @param unbindBankCardDTO
     */
    void unbindBankCard(Long shopId, UnbindBankCardDTO unbindBankCardDTO);

    /**
     * 查询银行卡
     * @param shopId
     * @param cardNo
     * @return
     */
    List<BindCard> queryBankCard(Long shopId, String cardNo);

    /**
     * 企业会员绑定对公户
     * @param shopId
     * @param bindCompanyAccountDTO
     * @param companyName
     */
    void bindCompanyAccount(Long shopId, BindCompanyAccountDTO bindCompanyAccountDTO, String companyName);

    /**
     * 删除缓存
     * @param shopId
     */
    void deleteCache(Long shopId);

    /**
     * 账户提现协议签约
     * @param shopId 商户系统用户id
     * @param backUrl 通知地址
     * @param signAcctProtocolDTO 签约提现协议类
     * @return
     */
    String signAcctProtocol(Long shopId, String backUrl, SignAcctProtocolDTO signAcctProtocolDTO);

    /**
     * 账户协议签约查询
     * @param shopId 商户系统用户id
     * @param signAcctProtocolDTO 签约提现协议类
     * @return
     */
    String signContractQuery(Long shopId, SignAcctProtocolDTO signAcctProtocolDTO);

    /**
     * 获取影印件状态
     * @param ocrRegnumComparisonResult
     * @param ocrIdcardComparisonResult
     * @return
     */
    Integer getIdCardStatus(Integer ocrRegnumComparisonResult, Integer ocrIdcardComparisonResult);

    /**
     * 获取通联支付是否开启
     * @return
     */
    boolean getIsAllinpay();

    /**
     * 创建通联会员
     * @param shopId
     */
    void createAllinpayCompanyMember(Long shopId);

    /**
     * 影印件上传
     * @param legalPicFaceToken
     * @param legalPicEmblemToken
     * @param picType
     * @param token
     * @param bizUserId
     * @return
     */
    IdCardCollectByFileUploadResp idCardCollectByFileUpload(String legalPicFaceToken, String legalPicEmblemToken, Integer picType, String token, String bizUserId);
}
